// 导入uni-id-common模块
const uniID = require('uni-id-common');
const db = uniCloud.database();

/**
 * 更新用户资料云函数
 * @param {Object} event 客户端传入的参数
 * @param {String} event.token 用户token
 * @param {Number} event.gender 性别（0未知，1男，2女）
 * @param {String} event.dob 出生年份
 * @param {String} event.location 地址
 * @param {String} event.avatar 用户头像URL
 * @param {Object} context 上下文信息
 */
exports.main = async (event, context) => {
  const { gender, dob, location, token, avatar, nickname } = event;
  
  // 初始化uniID实例，显式传入配置
  const uniIDIns = uniID.createInstance({
    context,
    config: {
      tokenSecret: "your-token-secret",
      tokenExpiresIn: 7200
    }
  });
  
  // 校验token参数
  if (!token) {
    return {
      code: 1,
      message: '请先登录'
    };
  }
  
  try {
    // 校验token
    const checkTokenRes = await uniIDIns.checkToken(token);
    
    // 检查token是否有效
    if (checkTokenRes.code) {
      return {
        code: checkTokenRes.code,
        message: checkTokenRes.errMsg || '登录状态失效，请重新登录'
      };
    }
    
    // 获取用户ID
    const userId = checkTokenRes.uid;
    
    // 准备更新的数据
    const updateData = {};
    if (gender !== undefined) updateData.gender = gender;
    if (dob) updateData.dob = dob;
    if (location) {
      // 简单处理地址信息，实际应用中可能需要更复杂的解析
      updateData.province = location;
    }
    if (avatar) updateData.avatar = avatar;
    if (nickname) updateData.nickname = nickname;
    
    // 更新用户信息
    const userCollection = db.collection('uni-id-users');
    await userCollection.doc(userId).update(updateData);
    
    // 查询更新后的用户信息
    const updatedUserRes = await userCollection.doc(userId).get();
    
    // 返回更新后的用户信息，过滤敏感字段
    const safeUserInfo = {
      userId: updatedUserRes.data._id,
      nickname: updatedUserRes.data.nickname || '',
      avatar: updatedUserRes.data.avatar || '',
      gender: updatedUserRes.data.gender || 0,
      province: updatedUserRes.data.province || '',
      city: updatedUserRes.data.city || '',
      country: updatedUserRes.data.country || '',
      language: updatedUserRes.data.language || '',
      registerDate: updatedUserRes.data.register_date || 0,
      lastLoginDate: updatedUserRes.data.last_login_date || 0,
      role: updatedUserRes.data.role || []
    };
    
    return {
      code: 0,
      message: '更新用户资料成功',
      data: safeUserInfo
    };
  } catch (error) {
    console.error('更新用户资料失败:', error);
    return {
      code: 1,
      message: '更新用户资料失败',
      data: error.message
    };
  }
};